import router from './router'
import store from './store'
import NProgress from 'nprogress' // Progress 进度条
import 'nprogress/nprogress.css'// Progress 进度条样式

import { getToken } from '@/utils/auth' // 验权


const whiteList = ['/login', '/authredirect']// 不重定向白名单

//导航确认前
router.beforeEach((to, from, next) => {
    NProgress.start()
    if(getToken()){
        if(to.path === '/'){
            next({ path: '/login' })
            NProgress.done()
        }else{
            if(store.getters.competence.length === 0){
                store.dispatch('GetUserInfo').then((res) => {
                    const roles = res.result.competence
                    store.dispatch('GenerateRoutes', { roles }).then(() => { // 生成可访问的路由表
                      router.addRoutes(store.getters.addRouters) // 动态添加可访问路由表
                      next({ ...to, replace: true }) // hack方法 确保addRoutes已完成 ,replace: true so the navigation will not leave a history record
                    })
                }).catch(err => {
                    next({ path: '/login' })
                }) 
            }else{
                next()
            }
        }
    }else{
        if (whiteList.indexOf(to.path) !== -1) { // 在免登录白名单，直接进入
            next() 
        } else {
            next('/login') // 否则全部重定向到登录页
            NProgress.done() // router在hash模式下 手动改变hash 重定向回来 不会触发afterEach 暂时hack方案 ps：history模式下无问题，可删除该行！
        }
    }
})

//组件被解析之后
router.afterEach((to, from) => {
  // ...
  NProgress.done()
})